﻿using app.Common;
using HLVControl.Grid;
using HLVControl.Grid.Data;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Data.EntityClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace eService.BLL
{
    //ITEMINOUT
    public class ExcuteKHOANMUC
    {
        eServiceEntities dbEntities;
        IExecuteData<ITEMINOUT> Execute;
        IExecuteData<ITEMOBJECT> ExecuteObject;
        IExecuteData<ITEMTYPE> ExecuteType;

        public string ErrMsg { get; set; }
        public bool KQ { get; set; }

        public ExcuteKHOANMUC()
        {
            dbEntities = ConnectionProvider.getDbEntities();
            Execute = new ExecuteData<ITEMINOUT>(dbEntities);
            ExecuteObject = new ExecuteData<ITEMOBJECT>(dbEntities);
            ExecuteType = new ExecuteData<ITEMTYPE>(dbEntities);
        }
        public List<ITEMOBJECT> GetAllObject()
        {
            List<ITEMOBJECT> list = (List<ITEMOBJECT>)ExecuteObject.GetAll();
            if (list != null && list.Count > 0) KQ = true;
            return list;
        }
        public List<ITEMTYPE> GetAllType()
        {
            List<ITEMTYPE> list = (List<ITEMTYPE>)ExecuteType.GetAll();
            if (list != null && list.Count > 0) KQ = true;
            return list;
        }
        public ITEMOBJECT GetByObjectID(string ID)
        {
            ITEMOBJECT u = ExecuteObject.GetById(ID);
            if (u != null) KQ = true;
            return u;
        }
        public ITEMTYPE GetByTypeID(string ID)
        {
            ITEMTYPE u = ExecuteType.GetById(ID);
            if (u != null) KQ = true;
            return u;
        }

        public List<ITEMINOUT> GetAll()
        {
            List<ITEMINOUT>  list = (List<ITEMINOUT>)Execute.GetAll();
            if (list != null && list.Count>0) KQ = true;
            return list;
        }
        public ITEMINOUT GetByID(int ID)
        {
            ITEMINOUT u = Execute.GetById(ID);
            if (u != null) KQ = true;
            return u;
        }
        public bool Add(ITEMINOUT NewKHOANMUC)
        {
            KQ = false;
            if (NewKHOANMUC != null)
            {
                KQ = Execute.Insert(NewKHOANMUC);
                if (KQ)
                    ErrMsg = "Thêm khoản mục mới thành công!";
                else
                    ErrMsg = "Không thể thêm khoản mục mới!";
            }
            else
            {
                ErrMsg = "Vui lòng nhập thông tin đầy đủ!";
            }
            return KQ;
        }
        public bool UpDate(ITEMINOUT KHOANMUC)
        {
            KQ = false;
            if (KHOANMUC != null)
            {

                ITEMINOUT obj = dbEntities.ITEMINOUTs.Find(KHOANMUC.ItemID);
                if (obj != null)
                {
                    KQ = Execute.Update(KHOANMUC, obj);
                    if (KQ)
                        ErrMsg = "Cập nhật khoản mục thành công!";
                    else
                        ErrMsg = "Không thể Cập nhật khoản mục!";
                }
            }
            else
            {
                ErrMsg = "Vui lòng chọn khoản mục!";
            }
            return KQ;
        }
        public bool Delete(ITEMINOUT KHOANMUC)
        {
            KQ = false;
            if (KHOANMUC != null)
            {
                ITEMINOUT obj = dbEntities.ITEMINOUTs.Find(KHOANMUC.ItemID);
                KQ = Execute.Delete(obj);
                if (KQ)
                    ErrMsg = "Xóa khoản mục thành công!";
                else
                    ErrMsg = "Không thể xóa khoản mục!";
            }
            else
            {
                ErrMsg = "Vui lòng chọn khoản mục!";
            }
            return KQ;
        }
        public ITEMINOUT LoadValues(int Ma, string Ten, string DoiTuong, string Loai, string GhiChu)
        {
            KQ = false;
            ITEMINOUT obj = new ITEMINOUT();
            if (Ten != "" || DoiTuong!="" || Loai!="")
            {
                obj.ItemID = Ma;
                obj.ItemName = Ten;
                obj.ItemNotes = GhiChu;
                obj.ItemType = Loai;
                obj.ItemObject = DoiTuong;
                KQ = true;
            }
            else
            {
                obj = null;
                ErrMsg = "Vui lòng điền tên, chọn đối tượng, chọn loại khoản mục!";
            }
            return obj;
        }
        public DataTable ToDataTable(List<ITEMINOUT> list)
        {
            DataTable dtData = Execute.ToDataTable<ITEMINOUT>(list);
            return dtData;
        }
        public bool LoadToTreeview(TreeListView treeview, List<ITEMINOUT> list)
        {
            KQ = false;
            DataTable dtData = Execute.ToDataTable<ITEMINOUT>(list);
            dtData.Columns.Add("colNameobj");
            dtData.Columns.Add("colNameType");
            foreach (DataRow row in dtData.Rows)
            {
                ITEMOBJECT Iobj = GetByObjectID(row["ItemObject"].ToString());
                if (Iobj != null) row["colNameObj"] = Iobj.ItemObjectName;

                ITEMTYPE IType = GetByTypeID(row["ItemType"].ToString());
                if (IType != null) row["colNameType"] = IType.ItemTypeName;
            }
            KQ = Execute.FillDataToTreeView(dtData, treeview);
            if (!KQ)
                ErrMsg = "Không thể tải khoản mục!";
            return KQ;
        }
        //Thieu Ham GetAllListBy
    }
}
